package com.zp.self.module.level_4_算法练习.算法.双指针.左右指针;
import org.junit.Test;

/**
 * @author By ZengPeng
 */
public class 力扣_925_长按键入 {
    @Test
    public void main() {
        
        Solution solution = new 力扣_925_长按键入().new Solution();
        System.out.println(solution);
    }

    /**
     题目：你的朋友正在使用键盘输入他的名字 name。偶尔，在键入字符 c 时，按键可能会被长按，而字符可能被输入 1 次或多次。
         你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字（其中一些字符可能被长按），那么就返回 True。

         示例 1：
         输入：name = "alex", typed = "aaleex"
         输出：true
         解释：'alex' 中的 'a' 和 'e' 被长按。

         示例 2：
         输入：name = "saeed", typed = "ssaaedd"
         输出：false
         解释：'e' 一定需要被键入两次，但在 typed 的输出中不是这样。

     分析：【P 💖💖】
        1.双指针：不断的遍历左边的字符，然后去右边找； -- 复习一下是否子集的哪个问题，删除字符
                注意：不能有多余的字符非连贯字符，所以记录前一个字符pro，用来判断是否叠词
                --执行耗时:0 ms,击败了100.00% 的Java用户
                --编码耗时:[11:26]

     边界值 & 注意点：
        1.
     **/
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public boolean isLongPressedName(String name, String typed) {
        char[] chars1 = name.toCharArray();
        char[] chars2 = typed.toCharArray();
        if(chars1[0]!=chars2[0])
            return false;
        int left = 1 ,right = 1,length1 = chars1.length,length2 = chars2.length;
        char pro = chars1[0];
        while (left<length1 && right<length2){
            if(chars1[left] == chars2[right]){
                pro = chars1[left];
                right++;
                left++;
            }else if(chars2[right] == pro){
                right++;
            }else
                return false;
        }
        if(left != length1)
            return false;
        while (right<length2){
            if(chars2[right] == pro)
                right++;
            else
                return false;
        }
        return true;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}